// main.js

// Modules to control application life and create native browser window
import { app, BrowserWindow, ipcMain, ipcRenderer, protocol, session, webFrame, webContents } from 'electron'
import path, { dirname, join } from 'node:path'
import { json } from 'node:stream/consumers'
import { fileURLToPath } from 'node:url'

// import { createRequire } from 'node:module'
// const require = createRequire(import.meta.url)
// console.log(require)

const __dirname = dirname(fileURLToPath(import.meta.url))
// The built directory structure
//
// ├─┬─┬ dist
// │ │ └── index.html
// │ │
// │ ├─┬ dist-electron
// │ │ ├── main.js
// │ │ └── preload.mjs
// │
process.env.APP_ROOT = path.join(__dirname, '..')

// 🚧 Use ['ENV_NAME'] avoid vite:define plugin - Vite@2.x
export const VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL']
export const MAIN_DIST = path.join(process.env.APP_ROOT, 'dist-electron')
export const RENDERER_DIST = path.join(process.env.APP_ROOT, 'dist')
process.env.VITE_PUBLIC = VITE_DEV_SERVER_URL ? path.join(process.env.APP_ROOT, 'public') : RENDERER_DIST

// const isDevelopment = process.env.NODE_ENV !== "production";

protocol.registerSchemesAsPrivileged([{ scheme: 'app', privileges: { secure: true, standard: true } }])
// 定义全局变量，获取窗口实例
let mainWindow: BrowserWindow | null

console.log(path.join(process.env.VITE_PUBLIC, 'favicon.ico'))
console.log(`import.meta.env: ${JSON.stringify(import.meta.env)}`)
// console.log(`process.env: ${JSON.stringify(process.env)}`)

function createWindow() {
  mainWindow = new BrowserWindow({
    title: 'U-MES',
    // width: 1600,
    // height: 900,
    minWidth: 1600,//1920
    minHeight: 900,//1080
    // show:false,
    icon: path.join(process.env.VITE_PUBLIC, 'favicon.ico'),
    // frame: true, // 去掉窗口边框
    //titleBarStyle: 'hidden', // 隐藏标题栏
    // fullscreen: true,
    // useContentSize: true,
    // transparent: true,
    webPreferences: {
      preload: path.join(__dirname, '../preload.mjs'),
      // 集成网页和 Node.js，也就是在渲染进程中，可以调用 Node.js 方法
      nodeIntegration: true, //开启true这一步很重要,目的是为了vue文件中可以引入node和electron相关的API
      contextIsolation: false, // 可以使用require方法
      webSecurity: false, // 禁用 Electron 的安全策略
      sandbox: false,
    },
  })
  // mainWindow.fullScreen();
  // mainWindow.minimize();

  // Test active push message to Renderer-process.
  mainWindow.webContents.on('did-finish-load', () => {
    mainWindow?.webContents.send('main-process-message', new Date().toLocaleString())
  })

  // 集成网页和 Node.js 后，需要加载
  // 这里接收的网址是指：Vite 启动后，会在本地运行一个服务，把这个服务网址丢进去就行
  if (VITE_DEV_SERVER_URL) {
    mainWindow.loadURL(VITE_DEV_SERVER_URL)
    // Open devTool if the app is not packaged
    // if(isDevelopment) {}
    mainWindow.webContents.openDevTools()
  } else {
    // win.loadFile('dist/index.html')
    mainWindow.loadFile(join(RENDERER_DIST, 'index.html'))
  }

  mainWindow.setMenu(null)
}
// 这段程序将会在 Electron 结束初始化
// 和创建浏览器窗口的时候调用
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(() => {
  createWindow()

  app.on('activate', () => {
    // 在 macOS 系统内, 如果没有已开启的应用窗口
    // 点击托盘图标时通常会重新创建一个新窗口
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
  })
})
// 除了 macOS 外，当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态,
// 直到用户使用 Cmd + Q 明确退出
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
    mainWindow = null
  }
})
// app.on('ready', () => {
//
// })
// app.on('activate', () => {
//   // On OS X it's common to re-create a window in the app when the
//   // dock icon is clicked and there are no other windows open.
//   if (BrowserWindow.getAllWindows().length === 0) {
//     createWindow()
//   }
// })

// 在当前文件中你可以引入所有的主进程代码
// 也可以拆分成几个文件，然后用 require 导入。

// ipcMain.handle("setIgnoreMouseEvents", (event, ignore) => {
//   if (ignore) (win).setIgnoreMouseEvents(true, { forward: true });
//   else (win).setIgnoreMouseEvents(false);
// });

// ipcMain.handle("hideWindow", (event) => {
//   (win).hide();
//   runExec('close') //关闭后台服务
// });

//自定义最小化
// ipcMain.on('window-min', () => {
//   // 窗口最小化
//   BrowserWindow.getFocusedWindow()?.minimize()
// })
// // //自定义最大化
ipcMain.on('window-max', (event, obj) => {
  // 窗口最大化 如果是最大化就取消最大化
  if (BrowserWindow.getFocusedWindow()?.isMaximized()) {
    // 取消最大化并设置窗口尺寸
    BrowserWindow.getFocusedWindow()?.unmaximize()
    //BrowserWindow.getFocusedWindow()?.setSize(1300, 800)
    BrowserWindow.getFocusedWindow()?.maximize()
    // obj.max = false
  }
  // 窗口不是最大化就进行最大化
  else {
    BrowserWindow.getFocusedWindow()?.maximize()
    // obj.max = true
  }
})
// // //自定义关闭
// ipcMain.on('window-close', () => {
//   // 窗口关闭
//   BrowserWindow.getFocusedWindow()?.close()
//   app.quit()
// })

// // self-define  message
// // 这段代码在 createWindow 创建窗口函数内执行
// ipcMain.on('message', (_, value) => {
//   console.log(value, '来了')
// })
